﻿

-- [P_GetUserSchemaInfo] 'NI', '860078320'
-- [P_GetUserSchemaInfo] 'EP', '2'
-- [P_GetUserSchemaInfo] @pShortIdentificator = 'MED113MVEN', @pRequiresDigitalCertificate = 1
ALTER PROCEDURE [dbo].[P_GetUserSchemaInfo]
	@pEnterpriseIdentificationType CHAR (2) = NULL
	,@pEnterpriseIdentificationNumber VARCHAR (MAX)	= NULL
	,@pShortIdentificator VARCHAR (50) = NULL
	,@pRequiresDigitalCertificate BIT = NULL
AS

	IF @pShortIdentificator IS NOT NULL
	BEGIN
		SET ROWCOUNT 1
	END

	SELECT
		*
	FROM
		(SELECT 
			DISTINCT 
			E.CodEsquema
			,E.Nombre
			,E.Version
			,E.SeparadorCampos
			,E.CodTipoTexto
			,SUBSTRING (NE.Nombre, 0, CHARINDEX ('.', NE.Nombre)) BaseNombreArchivo
			,'USR' AS CodTipoEntidad --PE.CodTipoEntidad			
			--,CASE 
			--	WHEN PE.CodTipoEntidad = 'USR' THEN 0
			--	ELSE RequiereFirmaDigital
			--END AS RequiresDigitalCertificate
			,CASE 
				WHEN 
					EN.EntidadId = '2' 
					AND EN.CodTipoId = 'EP'
				THEN 0
				ELSE RequiereFirmaDigital
			END AS RequiresDigitalCertificate
			,E.EsArchivoPlano
			,E.ExtensionesAceptables
			,E.MaximoTamanioArchivoBytes
			,E.EsCircular052 AS RequiresCMS
			,NULL AS Features
			,AceptaArchivosSinFirma AS OptionalDigitalCertificate
			,'PERIODO' AS DatePortionNames	
			--,CASE 
			--	WHEN PE.CodTipoEntidad = 'USR' THEN 0
			--	ELSE 1
			--END AS RequiresEnterpriseIdentificationInFile
			,1 AS RequiresEnterpriseIdentificationInFile
		FROM 
			TEsquemas E
		INNER JOIN
			TNombresArchivo NE ON NE.CodEsquema = E.CodEsquema
		INNER JOIN
			TEntidades EN ON 
				(@pEnterpriseIdentificationNumber IS NULL OR EN.EntidadId = @pEnterpriseIdentificationNumber)
				AND (@pEnterpriseIdentificationType IS NULL OR EN.CodTipoId = @pEnterpriseIdentificationType)
		INNER JOIN
			TEntidadXEsquema EE ON 
				EE.CodEsquema = E.CodEsquema	
				AND EE.CodEntidad = EN.CodEntidad	
		WHERE 
			SeparadorCampos IS NOT NULL
			AND (@pShortIdentificator IS NULL OR SUBSTRING (NE.Nombre, 0, CHARINDEX ('.', NE.Nombre)) = @pShortIdentificator)
		) X
	WHERE
		 (@pRequiresDigitalCertificate IS NULL OR X.RequiresDigitalCertificate = @pRequiresDigitalCertificate)
GO
	

-- [P_GetValidatorsBySchema] 63
-- P_GetValidatorsBySchema @pShortIdentificator = 'MED113MVEN'

ALTER PROCEDURE [dbo].[P_GetValidatorsBySchema]
	@pFileRegisterValidatorSetID INT = NULL
	,@pShortIdentificator VARCHAR (50) = NULL
AS
	SELECT 
		RE.TipoRegistro

		,CR.CodRegistro
		,CR.Nombre
		
		-- Identifica si tienen campos especificos sobre la entidad
		,CASE 
			CR.Nombre
		WHEN 'TIPOID' THEN 1
		ELSE 0
		END IsIdentificationTypeCode
		
		,CASE 
			CR.Nombre
		WHEN 'ID' THEN 1
		ELSE 0
		END IsIdentificationNumber
		
		,CR.Posicion
		-- Si es nulo la longitud de la expresion regular 
		-- se toma la del campo asociado
		-- Si no es nulo se toma la mayor entre la expresion y el campo asociado
		,CASE 
			SIGN (ISNULL (ER.Longitud, 0) - CR.Longitud)
			-- CR.Longitud es mayor
			WHEN				
				-1 
			THEN CR.Longitud
			ELSE ER.Longitud
		END AS Longitud
		
		--,ER.Longitud ER_x
		--,CR.Longitud CR_x
		
		,ER.ContieneLongitud
		,ER.CodExpReg
		,CR.CodCampo
		,CR.Requerido
		,CR.TipoRegistroAcumulado
		,CASE CR.PosicionCampoAcumulado
			WHEN NULL THEN NULL
			WHEN 0 THEN NULL
			ELSE CR.PosicionCampoAcumulado
		END AS PosicionCampoAcumulado
		,CR.EsConsecutivo
		,REPLACE(ER.Valor,'[ACUMULADO]{0}','') AS ExpresionRegular
		,(SELECT 
			CodValor + '|'
		FROM 
			TCatalogo C
		WHERE 
			C.CodGrupo = CR.GrupoValoresPermitidos
			OR C.CodGrupo = ER.GrupoValoresPermitidos
		FOR XML PATH ('')) AS ValoresPermitidos
		,CASE CR.Nombre 
			WHEN 'NUMREGISTROS' THEN 1
			ELSE 0
		END AS IsRegisterCount
	FROM
		TRegistrosEsquema RE
	INNER JOIN
		TCamposRegistro CR ON CR.CodRegistro = RE.CodRegistro
	INNER JOIN
		TExpresionRegular ER ON ER.CodExpReg = CR.CodExpReg
	INNER JOIN
		TNombresArchivo NE ON NE.CodEsquema = RE.CodEsquema
	WHERE
		(@pFileRegisterValidatorSetID IS NULL OR RE.CodEsquema = @pFileRegisterValidatorSetID)
		AND (@pShortIdentificator IS NULL OR SUBSTRING (NE.Nombre, 0, CHARINDEX ('.', NE.Nombre)) = @pShortIdentificator)
	ORDER BY
		RE.TipoRegistro
		,CR.Posicion
